/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package br.jm.acionista.view;

import br.jm.acionista.base.eao.EaoException;
import br.jm.acionista.base.util.JPAUtil;
import br.jm.acionista.entity.Usuario;
import br.jm.acionista.entity.UsuarioModulo;
import br.jm.acionista.filter.Configuracao;
import br.jm.acionista.filter.Constantes;
import br.jm.acionista.filter.Funcoes;
import br.jm.acionista.sistema.eao.UsuarioEao;
import br.jm.acionista.sistema.eao.UsuarioModuloEao;
import java.security.NoSuchAlgorithmException;
import java.util.List;
import javax.faces.application.FacesMessage;
import javax.faces.context.FacesContext;
import javax.servlet.http.HttpSession;

/**
 *
 * @author joao
 */
public class LoginBean {

    public HttpSession session;
    private UsuarioEao usuarioEAO;
    private Usuario usuarioAutenticado;
    private String username;
    private String password;
    private Funcoes funcoes = new Funcoes();
    private String cSql;
    private String NomUser;
    private UsuarioModuloEao UsuarioModuloJpa;
    private boolean disableButton;

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    public String getNomUser() {
        return NomUser;
    }

    public void setNomUser(String NomUser) {
        this.NomUser = NomUser;
    }

    public String login() throws EaoException, NoSuchAlgorithmException {
        FacesContext ctx = FacesContext.getCurrentInstance();
        FacesMessage msg = null;
        String cReturn = null;

        try {
            session = (HttpSession) ctx.getExternalContext().getSession(true);

            // COLOCAR NO FINAL O PATH
            String cPath = session.getServletContext().getRealPath("/");

            Configuracao configuracao = new Configuracao();
            configuracao.gravaObjeto();

            usuarioEAO = UsuarioEao.getInstance();
            UsuarioModuloJpa = UsuarioModuloEao.getInstance();

            password = funcoes.criptografaSenha(password);

            cSql = "from Usuario as o where o.usrName = '" + username + "' and o.usrPassword = '" + password + "'";

            List<Usuario> usuarioList = usuarioEAO.get(cSql);

            usuarioAutenticado = usuarioList.get(0);

            cSql = "id_usuario = " + this.usuarioAutenticado.getIdUsuario().toString();
            List<UsuarioModulo> listUsuarioModulo = UsuarioModuloJpa.getNative("UsuarioModulo", 0, UsuarioModuloJpa.getCount("Modulo"), null, true, null, null, cSql);

            usuarioAutenticado.setUsuarioModuloList(listUsuarioModulo);
        } catch (Exception e) {
            msg = new FacesMessage(FacesMessage.SEVERITY_WARN, "Erro de Login", "Problemas no Servidor - Entre em contato com o Administrador");
        }

        if (usuarioAutenticado != null) {
            if (usuarioAutenticado.getTipStatus().equals("Desativado")) {
                msg = new FacesMessage(FacesMessage.SEVERITY_INFO, "ATENÇÃO ... USUÁRIO DESATIVADO!", username);
            } else {
                msg = new FacesMessage(FacesMessage.SEVERITY_INFO, "Bem Vindo", username);

                this.NomUser = usuarioAutenticado.getNomUsuario();

                try {
                    // Administrador abre os botoes
                    disableButton = usuarioAutenticado.getTipUsuario().equals("Administrador");

                    session.setAttribute("usuarioAutenticado", usuarioAutenticado);
                    session.setAttribute("nomUser", usuarioAutenticado.getNomUsuario());

                    ctx.getExternalContext().redirect(ctx.getExternalContext().getRequestContextPath() + "/home.jsf");
                    //cReturn = "home";

                } catch (Exception e) {
                    msg = new FacesMessage(FacesMessage.SEVERITY_WARN, "Erro de Login", "Problemas no Servidor - Entre em contato com o Administrador");
                }
            }
        } else {
            msg = new FacesMessage(FacesMessage.SEVERITY_WARN, "Erro de Login", "Credenciais Inválidas");
        }

        FacesContext.getCurrentInstance().addMessage(null, msg);

        return cReturn;
    }

    public String encerraSessao() {
        try {
            FacesContext ctx = FacesContext.getCurrentInstance();
            session = (HttpSession) ctx.getExternalContext().getSession(false);
            session.setAttribute("usuarioAutenticado", null);
            ctx.getExternalContext().redirect(ctx.getExternalContext().getRequestContextPath() + Constantes.PAGINA_INDEX);

            JPAUtil.destruirFabrica();
            session.invalidate();
        } catch (Exception e) {
        }
        return null;
    }

    public boolean isDisableButton() {
        FacesContext ctx = FacesContext.getCurrentInstance();
        session = (HttpSession) ctx.getExternalContext().getSession(false);
        usuarioAutenticado = (Usuario) session.getAttribute("usuarioAutenticado");
        // Administrador abre os botoes
        disableButton = usuarioAutenticado.getTipUsuario().equals("Administrador");
        return disableButton;
    }

    public void setDisableButton(boolean disableButton) {
        this.disableButton = disableButton;
    }
}
